/* 判断单链表的全部n个字符是否中心对称 */

#include <iostream>
#include "linklistfun.h"
#include "stackfun.h"
using namespace std;

// 判断是否中心对称
int fun(LNode *L)
{
  int n = 0, j;
  
  // 创建栈
  stack s;
  
  // 初始化栈
  Init(s);
  
  // 遍历链表，记录链表长度
  LNode *p = L->next;
  while (p != NULL)
  {
    ++n;
    p = p->next;
  }
  p = L->next;
  
  // 将链表前半段元素 压入栈
  for (j = 0; j < n / 2; ++j)
  {
    push(s, p->data);
    p = p->next;
  }
  
  // 如果链表元素为奇数，特殊处理
  if (n % 2 != 0)
    p = p->next;
  
  // 遍历链表的后半段
  while (p != NULL)
  {
    // 将栈内元素与链表元素比较
    if (pop(s) == p->data)
      p = p->next;
    
    // 不中心对称
    else
      return 0;
  }
  
  // 中心对称
  return 1;
}

int main()
{
  // 创建链表
  LNode *L = link_list();
  
  // 判断是否中心对称
  cout << fun(L) << endl;
  return 0;
}
